package com.learn.mvc.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 第一个过滤器
 * 如果是implements HandlerInterceptor 做法
 * preHandle postHandle afterCompletion 不会提示必须实现。因为他们已经在接口中设置了 default void
 * idea  ctrl+o 快速重写接口实现类中需要重写的方法。
 * preHandle 具有拦截功能，其它俩属于马后炮。
 */
@Component
public class FirstInterceptor implements HandlerInterceptor {

    /**
     * 控制器方法执行之前执行
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor-->preHandle");
//        return false;  // 表示拦截
        return true;  // 表示放行
    }

    /**
     * 控制器方法执行之后执行
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("FirstInterceptor-->postHandle");
    }

    /**
     * 在视图渲染之后
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("FirstInterceptor-->afterCompletion");
    }
}